package domain.test;

import java.sql.SQLException;
import java.util.Map;

import com.opensymphony.xwork2.ActionContext;

import dominio.Usuario;
import junit.framework.*;

public class testUsuario extends TestCase{

	private Usuario aux;
	private Map session;
	
	public Usuario getAux() {
		return aux;
	}

	public void setAux(Usuario aux) {
		this.aux = aux;
	}

	public Map getSession() {
		return session;
	}

	public void setSession(Map session) {
		this.session = session;
	}

	public testUsuario() { }
	
	public void testaddUsuario() throws SQLException{
		try{
			
			aux = new Usuario("pepe@iso.com", "Pepe", "Iso", "9876", "Pepe Shop", "680822543", "C JuanPardo n 12");
			aux.create(true, true);
			Usuario usu = Usuario.read("pepe@iso.com", true);
			assertEquals("El usuario se debe haber registrado con exito",usu.getTelefono(),"680822600");
		}catch(Exception e){
			fail();
		}
	}
	
	public void testaddUsuariofail() throws SQLException{
		try{
			aux=new Usuario("pepe@iso.com", "Pepe", "Iso", "9876", "Pepe Shop", "680822543", "C JuanPardo n 12");
			aux.create(true,true);
			Usuario usu = Usuario.read("pepe@iso.com",true);
			fail();
		}catch(Exception e){
			System.out.println("El usuario ya esta registrado en la base de datos");
		}
	}
	
	public void testLogin() throws SQLException{
		try{
			session = ActionContext.getContext().getSession();
			Usuario aux = Usuario.read("pepe@iso.com",true);
	        session.put("usu", aux);
			assertEquals("El usuario se debe haber logueado con exito",aux.getPassword(),"9876");
		}catch(Exception e){
			fail();
		}
	}
	
	public void testLoginfail() throws SQLException{
		try{
			session = ActionContext.getContext().getSession();
			Usuario usu = Usuario.read("pepa@iso.com",true);
	        session.put("usu", aux);
			assertEquals("El usuario se debe haber logueado con exito",usu.getPassword(),"9876");
			fail();
		}catch(Exception e){
			System.out.println("El usuario no existe en la base de datos");
		}
	}
	
	public void testCerrarSesion() throws SQLException{
		try{
			Map session = ActionContext.getContext().getSession();
			session.remove("usu");
			Usuario usu = Usuario.read("pepe@iso.com",true);
		}catch(Exception e){
			fail();
		}
	}
	
	public void testModificarCuenta() throws SQLException{
		try{
			Map session = ActionContext.getContext().getSession();
			Usuario usu = Usuario.read("pepe@iso.com",true);
			session.put("usu",usu);
			usu.setEmail("pepito@iso.com");
			usu.update(usu, true);
			usu.read("pepito@iso.com",true);
			assertEquals("El usuario ha modificado la cuenta correctamente",usu.getName(),"Pepe");
		}catch(Exception e){
			fail();
		}
	}
	
	public void testBorrarCuenta() throws SQLException{
		try{
			Usuario usu = Usuario.read("pepito@iso.com",true);
			usu.delete(false);
			usu.read("pepito@iso.com",true);
			assertNull(usu);
		}catch(Exception e){
			fail();
		}
	}
}
